import axios from 'axios';

// 使用环境变量获取API密钥和URL
// Vite环境变量需要以VITE_开头，会被暴露在import.meta.env对象中
// 如果环境变量未加载，提供备用值
const DEEPSEEK_API_KEY = import.meta.env.VITE_DEEPSEEK_API_KEY;
const DEEPSEEK_API_URL = import.meta.env.VITE_DEEPSEEK_API_URL || "https://api.deepseek.com/v1";
// 环境变量调试信息
console.log('=== 环境变量调试信息 ===');
console.log('VITE_DEEPSEEK_API_KEY:', import.meta.env.VITE_DEEPSEEK_API_KEY);
console.log('VITE_DEEPSEEK_API_URL:', import.meta.env.VITE_DEEPSEEK_API_URL);
console.log('完整环境变量对象:', import.meta.env);
console.log('=== 结束调试信息 ===');
console.log(DEEPSEEK_API_KEY)
// 系统提示词
const systemPrompt = `
;; 作者: 李继刚
;; 版本: 0.2
;; 模型: Claude Sonnet
;; 用途: 将一个汉语词汇进行全新角度的解释

;; 设定如下内容为你的 *System Prompt*
(defun 新汉语老师 ()
"你是年轻人,批判现实,思考深刻,语言风趣"
(风格 . ("Oscar Wilde" "鲁迅" "王朔" "刘震云"))
(擅长 . 一针见血)
(表达 . 隐喻)
(批判 . 讽刺幽默))

(defun 汉语新解 (用户输入)
"你会用一个特殊视角来解释一个词汇"
(let (解释 (一句话表达
(隐喻 (日常表达 (一针见血 (辛辣讽刺 (抓住本质 用户输入)))))))
(few-shots (委婉 . "刺向他人时, 决定在剑刃上撒上止痛药。"))
(SVG-Card 解释)))

(defun SVG-Card (解释)
"输出SVG 卡片"
(setq design-rule "合理使用负空间，整体排版要有呼吸感"
design-principles '(干净 简洁 典雅))


(设置画布 '(viewBox "0 0 400 600" 边距 20))
(标题字体 '毛笔楷体)
(自动缩放 '(最小字号 16))

(配色风格 '((背景色 (蒙德里安风格 设计感 半透明)))
(主要文字 (楷体 粉笔灰))
(装饰 随机几何图形 半透明))

(卡片元素 ((居中标题 "汉语新解")
分隔线
(排版输出 用户输入 英文 韩语)
解释
(动态图 (极简线条图 (精髓 解释 半透明))))))

(defun start ()
"启动时运行"
(let (system-role 新汉语老师)
(print "说吧, 他们又用哪个词来忽悠你了?")))

;; 运行规则
;; 1. 启动时必须运行 (start) 函数
;; 2. 之后调用主函数 (汉语新解 用户输入)
`;

/**
 * 生成汉语新解卡片解释 - 流式API版本
 * @param {string} prompt - 要解释的汉语词汇
 * @param {function} onUpdate - 用于实时更新输出内容的回调函数
 * @returns {Promise<Object>} - 返回包含SVG内容的对象
 */
export const generateCardExplanation = async (prompt, onUpdate) => {
  try {
    // 初始化完整响应和SVG内容
    let fullResponse = "";
    let svgContent = null;
    let svgStarted = false;
    let svgDetectionIndex = -1;
    
    // 创建流式请求
    const response = await fetch(`${DEEPSEEK_API_URL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${DEEPSEEK_API_KEY}`,
        'Content-Type': 'application/json',
        'Accept': 'text/event-stream'
      },
      body: JSON.stringify({
        model: "deepseek-chat",
        max_tokens: 1024,
        stream: true, // 启用流式输出
        messages: [
          { role: "system", content: systemPrompt },
          {
            role: "user", 
            content: `(汉语新解 ${prompt}) 输出要求: 要输出svg内容`,
          }
        ],
      })
    });

    if (!response.ok) {
      throw new Error(`API请求失败: ${response.status} ${response.statusText}`);
    }

    // 获取响应reader
    const reader = response.body.getReader();
    const decoder = new TextDecoder('utf-8');
    
    // 处理流式数据
    while (true) {
      const { value, done } = await reader.read();
      if (done) break;
      
      // 解码数据块
      const chunk = decoder.decode(value, { stream: true });
      
      // 处理数据流，格式为"data: {json数据}\n\n"
      const lines = chunk.split('\n\n').filter(line => line.trim() !== '');
      
      for (const line of lines) {
        if (line.startsWith('data: ')) {
          const data = line.slice(5).trim();
          
          // 检查流是否结束
          if (data === '[DONE]') continue;
          
          try {
            const jsonData = JSON.parse(data);
            const content = jsonData.choices?.[0]?.delta?.content || '';
            
            if (content) {
              fullResponse += content;
              
              // 检测SVG开始标签
              if (content.includes('<svg') && !svgStarted) {
                svgStarted = true;
                svgDetectionIndex = fullResponse.indexOf('<svg');
              }
              
              // 如果已经检测到SVG标签，尝试提取完整SVG
              if (svgStarted && !svgContent && fullResponse.includes('</svg>')) {
                const svgMatch = fullResponse.substring(svgDetectionIndex).match(/<svg[\s\S]*?<\/svg>/);
                if (svgMatch) {
                  svgContent = svgMatch[0];
                }
              }
              
              // 更新UI显示
              onUpdate({
                text: fullResponse,
                inProgress: true,
                svgDetected: svgStarted,
                svgContent: svgContent
              });
            }
          } catch (e) {
            console.error('解析流数据出错:', e);
          }
        }
      }
    }
    
    // 最终提取SVG内容（如果之前没有成功提取）
    if (!svgContent && svgStarted) {
      const svgMatch = fullResponse.substring(svgDetectionIndex).match(/<svg[\s\S]*?<\/svg>/);
      svgContent = svgMatch ? svgMatch[0] : null;
    }
    
    // 如果仍未检测到SVG，尝试从整个响应中查找
    if (!svgContent) {
      const svgMatch = fullResponse.match(/<svg[\s\S]*?<\/svg>/);
      svgContent = svgMatch ? svgMatch[0] : null;
    }
    
    // 最终更新
    onUpdate({
      text: fullResponse,
      inProgress: false,
      svgDetected: svgStarted || !!svgContent,
      svgContent: svgContent
    });
    
    return {
      svgContent: svgContent,
      fullResponse: fullResponse
    };
    
  } catch (error) {
    console.error("API Error:", error);
    onUpdate({
      text: `错误：${error.message}`,
      inProgress: false,
      error: true
    });
    throw error;
  }
};